// 安装。
// rustup：curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
// 添加环境。
// export PATH="$HOME/.cargo/bin:$PATH"
// 创建工程。
// cargo new hello
// cd hello
// 编译。
// cargo build
// 运行。
// ./target/debug/hello
// 清理。
// cargo clean
// i8,u8,i16,u16,i32,u32,i64,u64,i128,u128,f32,f64,bool,char,isize,usize.
// use std::mem;
// rust函数命令使用蛇形命名法。
// static是返回值的生命周期是静态。返回值是str的引用。
// fn type_str<T>：定义一个泛型函数，T 是类型参数，表示可以接受任何类型
// _val: T：函数参数，使用 _ 前缀表示这个参数在函数体中不会被使用
// -> &'static str：返回值是一个具有 'static 生命周期的字符串引用
// 返回的字符串是编译期确定的，所以具有 'static 生命周期
fn type_str<T>(_val: T) -> & 'static str {
    std::any::type_name::<T>()
}
fn main() {
    {
        let tmptup = (1, "tup string", 3.14);
        println!("[{},{}]tup=({},{},{})", file!(), line!(), tmptup.0, tmptup.1, tmptup.2);
        println!("[{},{}]tup=({:?})", file!(), line!(), tmptup);
        println!("[{},{}]tup=({},{},{})", file!(), line!(), type_str(tmptup.0), type_str(tmptup.1), type_str(tmptup.2));
        let (a, b, c) = tmptup;
        println!("[{},{}]tup=({},{},{})", file!(), line!(), a, b, c);
    }
}
